/**
 * Created by xiongwei on 2017/3/16.
 */

const LogLevels = {
	trace: 0,
	debug: 1,
	info: 2,
	warn: 3,
	error: 4,
	none: 5,
};

/**
 * 日志服务
 */
export default class LogService {

	static logLevel = 'trace';

	/**
	 *
	 * @param data
	 */
	static trace(...data) {
		if (LogLevels[LogService.logLevel] <= LogLevels.trace) {
			console.trace(LogService.gethms(), ...data);
		}
	}

	/**
	 * debug日志
	 * @param data
	 */
	static debug(...data) {
		if (LogLevels[LogService.logLevel] <= LogLevels.debug) {
			console.log(LogService.gethms(), ...data);
		}
	}

	static info(...data) {
		if (LogLevels[LogService.logLevel] <= LogLevels.info) {
			console.info(LogService.gethms(), ...data);
		}
	}

	static warn(...data) {
		if (LogLevels[LogService.logLevel] <= LogLevels.warn) {
			console.warn(LogService.gethms(), ...data);
		}
	}

	static error(...data) {
		if (LogLevels[LogService.logLevel] <= LogLevels.error) {
			console.error(LogService.gethms(), ...data);
		}
	}

	static gethms() {
		let date = new Date();
		return date.getHours() + ":" + date.getMinutes() + ":" + date.getSeconds();
	}

	// 保存原始的console.log()函数
	static originalConsoleLog = console.log;
	static init() {
		// 重写console.log()函数
		console.log = function() {
			// 这里可以对log的内容进行自定义处理
			const args = Array.from(arguments);

			// 例如，将log的内容发送到服务器
			LogService.sendLogToServer(args);

			// 调用原始的console.log()函数以确保输出到开发者工具控制台
			LogService.originalConsoleLog.apply(console, args);
		};
	}

	static lisLog;

	// 自定义函数，将log的内容发送到服务器
	static sendLogToServer(args) {

		if (!!LogService.lisLog)
			LogService.lisLog(JSON.stringify(args));
		// 在这里编写将log发送到服务器的逻辑
		// 例如使用fetch()或XHR发送数据到服务器
		// 例如：
		// fetch('https://example.com/log', {
		//     method: 'POST',
		//     body: JSON.stringify(args)
		// })
		// .then(response => {
		//     console.log('日志已发送到服务器');
		// })
		// .catch(error => {
		//     console.error('发送日志时出错:', error);
		// });
	}

}